﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaCommerce.ABM_Rol
{
    public partial class frm_crearRol : Form
    {
        private bool nombreValido = false;

        public frm_crearRol()
        {
            InitializeComponent();
        }

        private void frm_crearRol_Load(object sender, EventArgs e)
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_FUNCIONALIDADES";
            DataTable dt_funcionalidad = baseDeDatos.consulta(sqlCommand);
            clb_funcionalidades.DataSource = dt_funcionalidad;
            clb_funcionalidades.DisplayMember = "NOMBRE";
            clb_funcionalidades.ValueMember = "ID_FUNCIONALIDAD";
        }

        private void btn_aceptar_Click(object sender, EventArgs e)
        {
            this.validar_nombreRol();

            if (nombreValido)
            {
                this.registrar_rol_funcionalidad();
                MessageBox.Show("Datos guardados");
                this.Close();
            }
            else
                MessageBox.Show("Los datos ingresados son incorrectos");
        }

        private void txt_nombreRol_Leave(object sender, EventArgs e)
        {
            validar_nombreRol();
        }

        private void validar_nombreRol()
        {
            if (txt_nombreRol.Text != "")
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_VALIDAR_ROL_NOMBRE";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("@nombre", txt_nombreRol.Text);
                int nombreExistente = baseDeDatos.ejecuta(sqlCommand);
                if (nombreExistente > 0)
                {
                    txt_nombreRol.BackColor = Color.Red;
                    nombreValido = false;
                }
                else
                {
                    txt_nombreRol.BackColor = Color.White;
                    nombreValido = true;
                }
            }
            else
            {
                txt_nombreRol.BackColor = Color.Red;
                nombreValido = false;
            }
        }

        private void registrar_rol_funcionalidad()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_CREAR_ROL";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.Clear();
            sqlCommand.Parameters.AddWithValue("@nombre", txt_nombreRol.Text);
            baseDeDatos.ejecuta(sqlCommand);

            sqlCommand.Parameters.Clear();
            sqlCommand.CommandText = "LOS_GDDES.SP_OBTENER_ID_ROL_POR_NOMBRE";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@nombre", txt_nombreRol.Text);
            int id_rol = baseDeDatos.ejecuta(sqlCommand);
            foreach (var item in clb_funcionalidades.CheckedItems)
            {  // iterate through checked items
                sqlCommand.Parameters.Clear();
                sqlCommand.CommandText = "LOS_GDDES.SP_AGREGAR_FUNCIONALIDAD_ROL";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("@id_rol", id_rol);
                sqlCommand.Parameters.AddWithValue("@id_funcionalidad", ((System.Data.DataRowView)(item)).Row.ItemArray[0]);
                baseDeDatos.ejecuta(sqlCommand);
                sqlCommand.Parameters.Clear();
            }
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btn_limpiar_Click(object sender, EventArgs e)
        {
            txt_nombreRol.Text = String.Empty;
            for (int i = 0; i < clb_funcionalidades.Items.Count; i++)
                clb_funcionalidades.SetItemChecked(i, false);
        }
    }
}
